/*
    XTU OJ: 1378
    by: fifth_light
*/

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int add(int start, int end) {
    return (start + end) * (end - start + 1) / 2;
}

int cache[110][15][110];

void init_cache() {
    for (int i = 0; i < sizeof(cache) / sizeof(int); i++) {
        *((int*) cache + i) = -1;
    }
}

int simple_condition(int i, int j, int k) {
    int min = add(1, j - 1);
    //printf("min(1, %d) = %d\n", j, add(1, j));
    if (i - k == min && j > 0) {
        if (k > j - 1) {
            // 刚好可以
            return 1;
        } else {
            return 0;
        }
    } else if (i - k < min) {
        // 不够了
        return 0;
    } else if (j == 0) {
        if (i == 0) {
            return 1;
        } else {
            return 0;
        }
    } else if (j == 1) {
        if (k >= i) {
            return 1;
        } else {
            return 0;
        }
    }
    return -1;
}

int dp(int i, int j, int k) {
    if (cache[i][j][k] != -1) {
        return cache[i][j][k];
    }
    // 进行一些简单情况的直接判断
    int simple = simple_condition(i, j, k);
    if (simple != -1) {
        cache[i][j][k] = simple;
        return simple;
    }
    int sum = 0;
    for (int n = 1; n < k; n++) {
        sum += dp(i - k, j - 1, n);
        //printf("dp(%d, %d, %d) = %d\n", i - k, j - 1, n, dp(i - k, j - 1, n));
    }
    cache[i][j][k] = sum;
    return sum;
}

int main(void) {
    init_cache();
    int t;
    scanf("%d", &t);
    for(int i = 0; i < t; i++) {
        int n, m;
        scanf("%d%d", &n, &m);
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += dp(n, m, i);
            //printf("dp(%d, %d, %d) = %d\n", n, m, i, dp(n, m, i));
        }
        printf("%d\n", sum);
    }
    return 0;
}
